/**
 * SOP模块 - API日志管理API
 * @description API日志管理相关的API接口定义
 * @author AI Assistant
 * @since 1.0.0
 */

import request from '@/config/axios'
import type { ApiLogVO, ApiLogPageReqVO, ApiLogExportReqVO, PageResult } from './types'

/**
 * 获取API日志分页列表
 * @param params 分页查询参数
 * @returns API日志分页数据
 */
export const getApiLogPageApi = (params: ApiLogPageReqVO): Promise<PageResult<ApiLogVO>> => {
  return request.get({ url: '/sop/api-log/page', params })
}

/**
 * 获取API日志详情
 * @param id 日志ID
 * @returns API日志详情
 */
export const getApiLogApi = (id: number): Promise<ApiLogVO> => {
  return request.get({ url: `/sop/api-log/get?id=${id}` })
}

/**
 * 根据TraceId获取API日志详情
 * @param traceId 链路追踪ID
 * @returns API日志详情
 */
export const getApiLogByTraceIdApi = (traceId: string): Promise<ApiLogVO> => {
  return request.get({ url: `/sop/api-log/get-by-trace-id?traceId=${traceId}` })
}

/**
 * 删除API日志
 * @param id 日志ID
 * @returns 删除结果
 */
export const deleteApiLogApi = (id: number): Promise<boolean> => {
  return request.delete({ url: `/sop/api-log/delete?id=${id}` })
}

/**
 * 批量删除API日志
 * @param ids 日志ID列表
 * @returns 批量删除结果
 */
export const batchDeleteApiLogApi = (ids: number[]): Promise<boolean> => {
  return request.delete({
    url: '/sop/api-log/batch-delete',
    data: { ids }
  })
}

/**
 * 清理过期日志
 * @param days 保留天数
 * @returns 清理结果
 */
export const cleanExpiredLogsApi = (
  days: number
): Promise<{
  deletedCount: number // 删除数量
}> => {
  return request.delete({ url: `/sop/api-log/clean-expired?days=${days}` })
}

/**
 * 导出API日志数据
 * @param params 导出参数
 * @returns 导出文件
 */
export const exportApiLogApi = (params: ApiLogExportReqVO): Promise<void> => {
  return request.download({
    url: '/sop/api-log/export',
    params
  })
}

/**
 * 获取API调用统计
 * @param params 查询参数
 * @returns 统计数据
 */
export const getApiCallStatisticsApi = (params: {
  appId?: string
  merchantNo?: string
  apiPath?: string
  dateRange?: [string, string]
}): Promise<{
  totalCalls: number // 总调用次数
  successCalls: number // 成功调用次数
  failCalls: number // 失败调用次数
  successRate: number // 成功率(%)
  avgExecuteTime: number // 平均执行时间(毫秒)
  maxExecuteTime: number // 最大执行时间(毫秒)
  minExecuteTime: number // 最小执行时间(毫秒)
  totalDataSize: number // 总数据量(字节)
}> => {
  return request.get({ url: '/sop/api-log/call-statistics', params })
}

/**
 * 获取热门API排行
 * @param params 查询参数
 * @returns 热门API列表
 */
export const getPopularApisApi = (params: {
  merchantNo?: string
  dateRange?: [string, string]
  limit?: number // 返回数量限制，默认10
}): Promise<
  Array<{
    apiPath: string // API路径
    callCount: number // 调用次数
    successCount: number // 成功次数
    failCount: number // 失败次数
    successRate: number // 成功率(%)
    avgExecuteTime: number // 平均执行时间(毫秒)
  }>
> => {
  return request.get({ url: '/sop/api-log/popular-apis', params })
}

/**
 * 获取错误日志统计
 * @param params 查询参数
 * @returns 错误统计数据
 */
export const getErrorLogStatisticsApi = (params: {
  appId?: string
  merchantNo?: string
  dateRange?: [string, string]
}): Promise<
  Array<{
    httpStatus: number // HTTP状态码
    businessCode: string // 业务状态码
    businessMsg: string // 业务消息
    errorCount: number // 错误次数
    errorRate: number // 错误率(%)
    firstOccurTime: string // 首次出现时间
    lastOccurTime: string // 最后出现时间
  }>
> => {
  return request.get({ url: '/sop/api-log/error-statistics', params })
}

/**
 * 获取慢查询日志
 * @param params 查询参数
 * @returns 慢查询日志列表
 */
export const getSlowLogsApi = (params: {
  appId?: string
  merchantNo?: string
  minExecuteTime?: number // 最小执行时间(毫秒)，默认1000
  dateRange?: [string, string]
  pageNo: number
  pageSize: number
}): Promise<PageResult<ApiLogVO>> => {
  return request.get({ url: '/sop/api-log/slow-logs', params })
}

/**
 * 获取API调用趋势
 * @param params 查询参数
 * @returns 趋势数据
 */
export const getApiCallTrendApi = (params: {
  appId?: string
  merchantNo?: string
  apiPath?: string
  dateRange: [string, string] // 日期范围(必填)
  granularity: string // 统计粒度: day-按天 hour-按小时(必填)
}): Promise<
  Array<{
    date: string // 日期
    hour?: number // 小时(按小时统计时有值)
    callCount: number // 调用次数
    successCount: number // 成功次数
    failCount: number // 失败次数
    avgExecuteTime: number // 平均执行时间(毫秒)
  }>
> => {
  return request.get({ url: '/sop/api-log/call-trend', params })
}
